package com.ygqh.baby.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;

import com.ygqh.baby.ao.CompleteStatus;
import com.ygqh.baby.ao.Message;
import com.ygqh.baby.ao.QueryInfo;
import com.ygqh.baby.ao.ResultSet;
import com.ygqh.baby.model.YgGroupBuyModel;
import com.ygqh.baby.model.YgGroupOrderRemindModel;
import com.ygqh.baby.model.YgProductGroupModel;
import com.ygqh.baby.model.YgPtSkuInfo;
import com.ygqh.baby.po.YgGroupBuying;

public interface YgGroupBuyingService {

	List<YgGroupBuying> find();

	int findCount();

	YgGroupBuying findById(Long id);

	int deleteSoft(Long[] ids);

	int deleteSoft(Long id);

	int save(YgGroupBuying ygGroupBuying);

	int update(YgGroupBuying ygGroupBuying);

	int saveOrUpdate(YgGroupBuying ygGroupBuying);

	ResultSet<YgGroupBuying> search(QueryInfo queryInfo, String q);

	List<YgGroupBuyModel> findGroupBuyByGroupId(QueryInfo queryInfo, Long groupId);

	YgGroupBuying addGroupBuyIng(Long groupId, Long userId, Long amount);

	YgGroupBuyModel findGroupBuyById(Long groupBuyId);

	/**
	 * 获取商品拼团相关信息
	 * 
	 * @param productId
	 * @return
	 */
	YgProductGroupModel findProductInfoWithGroup(Long productId);

	/**
	 * 获取其他拼团商品信息
	 * 
	 * @param productId
	 * @return
	 */
	List<YgProductGroupModel> findOtherGroupProduct(QueryInfo queryInfo, Long productId);

	/**
	 * 获取所有未完成拼团信息
	 * 
	 * @param queryInfo
	 * @return
	 */
	List<YgGroupBuyModel> findAllGroupBuy(QueryInfo queryInfo);

	/**
	 * 团长订单支付成功后，将该拼团设置为有效
	 * 
	 * @param groupBuyId
	 * @param groupBuyer
	 *            团长id
	 * 
	 * @return
	 */
	int updateGroupBuyStatusByPaySuccess(Long groupBuyId, Long groupBuyer);

	/**
	 * 
	 * @param groupBuyStaus
	 *            Complete 完成 UnComplete 未完成
	 * @param groupBuyId
	 * @return
	 */
	int updateGroupBuyStatus(CompleteStatus groupBuyStaus, Long groupBuyId);

	/**
	 * 获取建团 大于一个小时且未完成的拼团
	 * 
	 * @param limitTime
	 * @param endTime
	 * @param startTime
	 * 
	 * @return
	 */
	List<YgGroupOrderRemindModel> findGroupOrderIncompleteReminder(Date limitTime, Date startTime, Date endTime);

	/**
	 * 获取小于 time 的所有未完成拼团
	 * (包括Delete状态发起人未支付订单的拼团)
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	List<YgGroupOrderRemindModel> findGroupBuy4Complete(Date startTime, Date endTime);

	int updateGbForCompleteBatch(List<YgGroupBuying> gbList);

	/**
	 * 获取随机数
	 * 
	 * @param start
	 * @param end
	 * @return
	 */
	default int getRandomNum(int start, int end) {
		Random random = new Random();
		int num = start - 1;
		int limit = end - start;
		num += random.nextInt(limit);
		return num;
	}

	/**
	 * 更新拼团完成数量
	 * 
	 * @param id
	 * @param detailAmount
	 * @return
	 */
	int updateGroupBuyAmount(Long id, Long detailAmount, Boolean resetCompleteTime);

	ResultSet<YgGroupBuying> search(QueryInfo queryInfo, Long id, String userName, Date startDate, Date endDate, String groupName,
			CompleteStatus completeStatus);

	/**
	 * 
	 * @Title: getNewCustomGroupBuy
	 * @param key
	 *            (product,sku 对应返回结果)F
	 * @return 入参 List<Long> 返回类型
	 * @author （guohao）
	 * @throws
	 * @date 2017年11月20日 下午3:05:40
	 * @version V1.0
	 */
	List<Long> getNewCustomGroupBuy(String key);

	Message checkNewCustomGroup(List<YgPtSkuInfo> skuList, Boolean isNew, BigDecimal accountPrice);

	List<Long> findSkuIdsByPids(Long[] pIds);

	int updateGbForExpireBatch(List<YgGroupBuying> gbList);

	List<Map<String, Object>> findTuanMemberList(Long grouyBuyId);

    int updateGroupBuyAmountByGroupId(Long groupId, Long groupAmount);
}
